{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2023-06-25T13:50:21.113024500Z",
     "start_time": "2023-06-25T13:50:20.558508200Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy\n",
    "import librosa\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from numpy.fft import fft, rfft, fftshift\n",
    "\n",
    "win_length = 256"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "# Voibis_windows"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "from window_function import Voibis_windows\n",
    "\n",
    "Voibis = Voibis_windows(win_length)\n",
    "plt.plot(Voibis)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# Rectangle_windows"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "from window_function import Rectangle_windows\n",
    "\n",
    "Rectangle = Rectangle_windows(win_length)\n",
    "plt.plot(Rectangle)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# hanning_window"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "hanning = np.hanning(win_length)\n",
    "\n",
    "plt.plot(hanning)\n",
    "plt.show()\n",
    "\n",
    "# frequency response\n",
    "plt.figure()\n",
    "A = rfft(hanning, 512) / (win_length / 2)  # (512,)\n",
    "mag = np.abs(A)\n",
    "freq = np.linspace(0, 0.5, len(A))\n",
    "with np.errstate(divide='ignore', invalid='ignore'):\n",
    "    response = 20 * np.log10(mag)\n",
    "response = np.clip(response, -100, 100)\n",
    "plt.plot(freq, response)\n",
    "plt.title(\"Frequency response of the Hann window\")\n",
    "plt.ylabel(\"win_lengthagnitude [dB]\")\n",
    "plt.xlabel(\"Normalized frequency [cycles per sample]\")\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# hamming_window"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "hamming = np.hamming(win_length)\n",
    "plt.plot(hamming)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# blackman_window"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "blackman = np.blackman(win_length)\n",
    "plt.plot(blackman)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# bartlett_window"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "bartlett = np.bartlett(win_length)\n",
    "plt.plot(bartlett)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# kaiser_window"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "kaiser = np.kaiser(win_length,14)\n",
    "plt.plot(kaiser)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# Orka前馈窗"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "def Orka_forward_window(N1=64, N2=448, hop_size=64, NFFT=512):\n",
    "    analysisWindow = np.zeros(NFFT)\n",
    "    for n in range(NFFT):\n",
    "        if n < N1:\n",
    "            analysisWindow[n] = np.sin(n * np.pi / (2 * N1)) ** 2\n",
    "        elif N1 <= n <= N2:\n",
    "            analysisWindow[n] = 1\n",
    "        elif N2 < n <= N2 + hop_size:\n",
    "            analysisWindow[n] = np.sin(np.pi * (N2 + hop_size - n) / (2 * hop_size))\n",
    "\n",
    "    return analysisWindow\n",
    "\n",
    "Orka_forward = Orka_forward_window()\n",
    "plt.plot(Orka_forward)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# Orka反馈窗"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "def Orka_backward_window(N1=64, N2=448, hop_size=64, NFFT=512):\n",
    "    synthesisWindow = np.zeros(NFFT)\n",
    "    for n in range(NFFT):\n",
    "        if n < N2 - hop_size:\n",
    "            synthesisWindow[n] = 0\n",
    "        elif N2 - hop_size <= n <= N2:\n",
    "            synthesisWindow[n] = np.cos(np.pi * (n - N2) / (2 * hop_size)) ** 2\n",
    "        elif N2 < n <= N2 + hop_size:\n",
    "            synthesisWindow[n] = np.sin(np.pi * (N2 + hop_size - n) / (2 * hop_size))\n",
    "    return synthesisWindow\n",
    "\n",
    "Orka_backward = Orka_backward_window()\n",
    "plt.plot(Orka_backward)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 非对称 sqrt hann窗"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "def getAsqrtAnalysisWindow(NFFT, hop_size, d=0):\n",
    "    risingSqrtHann = np.sqrt(np.hanning(2 * (NFFT - hop_size - d) + 1)[:(NFFT - hop_size - d)])\n",
    "    fallingSqrtHann = np.sqrt(np.hanning(2 * hop_size + 1)[:2 * hop_size])\n",
    "\n",
    "    window = np.zeros(NFFT)\n",
    "    window[:d] = 0\n",
    "    window[d:NFFT - hop_size] = risingSqrtHann[:NFFT - hop_size - d]\n",
    "    window[NFFT - hop_size:] = fallingSqrtHann[-hop_size:]\n",
    "\n",
    "    return window\n",
    "sqrt_hann = getAsqrtAnalysisWindow(NFFT=128, hop_size=32, d=0)\n",
    "plt.plot(sqrt_hann)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "plt.figure(figsize=(15, 10))\n",
    "plt.plot(Rectangle, label=\"Rectangle\")\n",
    "plt.plot(hanning, label=\"hanning\")\n",
    "plt.plot(hamming, label=\"hamming\")\n",
    "plt.plot(Voibis, label=\"Voibis\")\n",
    "plt.plot(blackman, label=\"blackman\")\n",
    "plt.plot(bartlett, label=\"bartlett\")\n",
    "plt.plot(kaiser, label=\"kaiser\")\n",
    "plt.plot(Orka_forward,label=\"Orka_forward\")\n",
    "plt.plot(Orka_backward,label=\"Orka_backward\")\n",
    "\n",
    "plt.legend(fontsize=15,)\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# RNNoise_window"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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SZNMjx49zO7du6seeXl5Vc/X53732+IycOBAM2rUqKqvPR6PadmypUlLS7MwVePx++Li9XpNXFycmTx5ctWy/fv3G5fLZd555x1jjDFr1641ksySJUuq1vn888+NzWYzO3furLfsviw3N9dIMt98840x5uA+DgwMNLNmzapa5+effzaSzKJFi4wxBwun3W432dnZVeu8+OKLJjw83JSXl9fvG/BxTZs2Na+88gr7vY4VFRWZTp06mXnz5pnTTz+9qriw3+vOpEmTTGJi4mGfq+/97pdDRW63W+np6UpNTa1aZrfblZqaqkWLFlmYrPHasmWLsrOzq+3ziIgIJScnV+3zRYsWKTIyUv37969aJzU1VXa7XT/99FO9Z/ZFBQUFkqSoqChJUnp6uioqKqrt965du6pNmzbV9nuvXr0UGxtbtc6gQYNUWFioNWvW1GN63+XxeDRjxgyVlJQoJSWF/V7HRo0apQsvvLDa/pX4ea9rGzZsUMuWLdW+fXsNGzZMWVlZkup/v/vETRZrW35+vjweT7UdKEmxsbFat26dRakat+zsbEk67D7/9bns7GzFxMRUez4gIEBRUVFV6+DIvF6vxowZo1NOOUU9e/aUdHCfOp1ORUZGVlv39/v9cH8vvz6HI1u1apVSUlJUVlam0NBQffjhh+revbsyMjLY73VkxowZWrZsmZYsWXLIc/y8153k5GRNnz5dXbp00e7du/XQQw/ptNNO0+rVq+t9v/tlcQEao1GjRmn16tX6/vvvrY7iN7p06aKMjAwVFBTovffe04gRI/TNN99YHavR2r59u0aPHq158+YpKCjI6jh+5fzzz6/6c+/evZWcnKy2bdvq3XffVXBwcL1m8cuhoujoaDkcjkPOeM7JyVFcXJxFqRq3X/fr0fZ5XFyccnNzqz1fWVmpvXv38vfyB2677TZ9+umn+vrrr9W6deuq5XFxcXK73dq/f3+19X+/3w/39/Lrczgyp9Opjh07KikpSWlpaUpMTNSzzz7Lfq8j6enpys3NVb9+/RQQEKCAgAB98803+uc//6mAgADFxsay3+tJZGSkOnfurI0bN9b7z7tfFhen06mkpCTNnz+/apnX69X8+fOVkpJiYbLGq127doqLi6u2zwsLC/XTTz9V7fOUlBTt379f6enpVessWLBAXq9XycnJ9Z7ZFxhjdNttt+nDDz/UggUL1K5du2rPJyUlKTAwsNp+z8zMVFZWVrX9vmrVqmqlcd68eQoPD1f37t3r5400El6vV+Xl5ez3OnL22Wdr1apVysjIqHr0799fw4YNq/oz+71+FBcXa9OmTWrRokX9/7zX+NTiRmLGjBnG5XKZ6dOnm7Vr15qbbrrJREZGVjvjGTVTVFRkli9fbpYvX24kmaefftosX77cbNu2zRhz8HLoyMhI89FHH5mVK1eaSy655LCXQ/ft29f89NNP5vvvvzedOnXicuijuOWWW0xERIRZuHBhtcsUDxw4ULXOzTffbNq0aWMWLFhgli5dalJSUkxKSkrV879epnjuueeajIwMM3fuXNO8eXMuD/0D48aNM998843ZsmWLWblypRk3bpyx2Wzmyy+/NMaw3+vLb68qMob9XlfuvPNOs3DhQrNlyxbz3//+16Smppro6GiTm5trjKnf/e63xcUYY5577jnTpk0b43Q6zcCBA82PP/5odSSf9vXXXxtJhzxGjBhhjDl4SfSECRNMbGyscblc5uyzzzaZmZnVXmPPnj1m6NChJjQ01ISHh5uRI0eaoqIiC96Nbzjc/pZkXn/99ap1SktLza233mqaNm1qQkJCzGWXXWZ2795d7XW2bt1qzj//fBMcHGyio6PNnXfeaSoqKur53fiW6667zrRt29Y4nU7TvHlzc/bZZ1eVFmPY7/Xl98WF/V43hgwZYlq0aGGcTqdp1aqVGTJkiNm4cWPV8/W5323GGHPcx4oAAADqkV+e4wIAAHwTxQUAAPgMigsAAPAZFBcAAOAzKC4AAMBnUFwAAIDPoLgAAACfQXEBAAA+g+ICAAB8BsUFAAD4DIoLAADwGRQXAADgM/4f1XWySDyyfu0AAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def RNNoise_window(win_length):\n",
    "    x = np.arange(0, win_length)\n",
    "    return np.sin(0.5 * np.pi *\n",
    "                  np.sin(0.5 * np.pi * (x + 0.5) / win_length) ** 2)\n",
    "\n",
    "\n",
    "RNNoise = RNNoise_window(480)\n",
    "plt.plot(RNNoise)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2023-06-25T13:50:24.274268300Z",
     "start_time": "2023-06-25T13:50:24.270277900Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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brz++uvd+5UQERGRx+l0kZkxYwYqKiqwaNEiGI1GpKSkYOPGjY4JvUVFRVCpzl/oGTt2LN59910888wz+P3vf4/+/ftj7dq1SEpK6r6vgoiIiDxSp+8jI0JP3keGiIiIukdP/P7mXktERESkWCwyREREpFgsMkRERKRYLDJERESkWCwyREREpFgsMkRERKRYLDJERESkWCwyREREpFgsMkRERKRYnd6iQIS2mw+bTCbBSYiIiOhytf3eduYmAoooMrW1tQCA2NhYwUmIiIios2praxEQEOCUj62IvZZsNhvOnDkDPz8/SJLUbR/XZDIhNjYWxcXF3MOpB/G8i8HzLgbPuxg872L8+LzLsoza2lpERUW121C6OyniioxKpUJMTIzTPr6/vz//ogvA8y4Gz7sYPO9i8LyL8cPz7qwrMW042ZeIiIgUi0WGiIiIFMuji4xer8fixYuh1+tFR/EoPO9i8LyLwfMuBs+7GCLOuyIm+xIRERF1xKOvyBAREZGyscgQERGRYrHIEBERkWKxyBAREZFieXSRWbp0KeLj42EwGJCWloadO3eKjqRYS5YswahRo+Dn54ewsDBMnz4dR44caXdMU1MT5s6di+DgYPj6+uK2225DWVlZu2OKioowZcoUeHt7IywsDE888QRaWlp68ktRtBdffBGSJOGxxx5zPMbz7hwlJSW45557EBwcDC8vLwwdOhS7d+92vF+WZSxatAiRkZHw8vJCRkYGjh071u5jVFVVYdasWfD390dgYCAeeOAB1NXV9fSXohhWqxULFy5EQkICvLy80LdvX/zxj39st48Pz/uV27p1K6ZNm4aoqChIkoS1a9e2e393neN9+/ZhwoQJMBgMiI2NxZ///OeuBZY91KpVq2SdTievWLFCPnDggPzQQw/JgYGBcllZmehoipSZmSm/+eabcn5+vpyXlyffeOONclxcnFxXV+c45uGHH5ZjY2PlrKwseffu3fKYMWPksWPHOt7f0tIiJyUlyRkZGXJubq68YcMGOSQkRF6wYIGIL0lxdu7cKcfHx8vDhg2T582b53ic5737VVVVyb1795bvv/9+eceOHfLJkyflL774Qj5+/LjjmBdffFEOCAiQ165dK+/du1e+6aab5ISEBLmxsdFxzKRJk+Tk5GT5+++/l7/99lu5X79+8syZM0V8SYrw/PPPy8HBwfK6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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "def RNNoise_window(win_length):\n",
    "    x = np.arange(0, win_length)\n",
    "    return np.sin(0.5 * np.pi *\n",
    "                  np.sin(0.5 * np.pi * (x + 0.5) / win_length) ** 2)\n",
    "\n",
    "FRAME_SIZE = 480\n",
    "WINDOW_SIZE = 960\n",
    "half_window = RNNoise_window(480)\n",
    "\n",
    "def _apply_window(x):\n",
    "    \"\"\"Multiply input by sinosoidal function\"\"\"\n",
    "    for i in range(FRAME_SIZE):\n",
    "        x[i] *= half_window[i]\n",
    "        x[WINDOW_SIZE - 1 - i] *= half_window[i]\n",
    "\n",
    "    return x\n",
    "\n",
    "RNNoise_window = np.concatenate([half_window,half_window[::-1]],axis=0)\n",
    "plt.plot(RNNoise_window)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2023-06-25T13:50:24.385973200Z",
     "start_time": "2023-06-25T13:50:24.273271Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2023-06-25T13:50:24.386968900Z",
     "start_time": "2023-06-25T13:50:24.379985700Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2023-06-25T13:50:24.386968900Z",
     "start_time": "2023-06-25T13:50:24.379985700Z"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
